In the United States and elsewhere, computers have become part of people's everyday lives, both in the workplace and in personal endeavors. This is because a general-purpose computer can be programmed to run a variety of software programs each providing different processing and networking functions. Computer programmers develop computer code, and in many cases are also responsible for supporting computer code once it is released into a production and/or commercial environment. Some companies hire large numbers of computer programmers and support technicians to develop and support released code on the company's behalf.
One approach is to hire large numbers of programmers and develop and support software “in house.” While this affords significant control over the programming staff, finding, hiring, and maintaining such a staff can be cost prohibitive. Furthermore, as individual programmers leave the company, much of the technical and industrial knowledge is also lost. Alternatively, many companies “outsource” their software programming and support activities through consulting firms, third parties, or contract employees. This approach relieves the company of the burdens of managing individual employees, however the quality and consistency of the work may be suspect, and the challenges of integrating work from numerous outside vendors can be significant.